/*
 * Preprocesador.h
 *
 *  Created on: 02/09/2011
 *      Author: guido
 */

#ifndef PREPROCESADOR_H_
#define PREPROCESADOR_H_
#include "listaDefiniciones.h"
#include "constantes.h"

struct Directiva {
	char identificador[MAX_LONG_DIRECTIVA];
	char primerParametro[MAX_DEFINE_NOMBRE];
	char segundoParametro[MAX_DEFINE_VALOR];
};
typedef struct Directiva Directiva;

struct Preprocesador {
    int ifs;
    int omitirCodigo;
    int elseAbierto;
    char* linea;
    char ruta[MAX_DE_RUTA];
    int hayDirectiva;
    Directiva directiva;
    ListaDefiniciones definiciones;
};
typedef struct Preprocesador Prepro;



void Prepro_init(Prepro* p);
int Prepro_procesarDirectivas(Prepro* p, char* entrada);
int Prepro_validarLinea(char* entrada);
int Prepro_procesarInclude(Prepro* p);
int Prepro_procesarDefine(Prepro* p);
int Prepro_procesarIfdef(Prepro* p);
int Prepro_procesarIfndef(Prepro* p);
int Prepro_procesarEndif(Prepro* p);
int Prepro_procesarElse(Prepro* p);
void Prepro_cargarLinea(Prepro* p, char* entrada);
int Prepro_setearDirectivaIf(Prepro* p);
void Prepro_reemplazarDefines(Prepro* p);
int Prepro_obtenerTokens(char* destino, char* source);

#endif /* PREPROCESADOR_H_ */
